<template>
  <div class="hello">
    <!-- 上传 Excel 文件 -->
    <input type="file" @change="handleFileUpload" />
    <!-- 显示数据 -->
    <div v-if="excelData.length > 0">
      <h3>处理后的 Excel 数据：</h3>
      <pre>{{ excelData }}</pre>
    </div>
    <div v-else>
      <p>请上传一个 Excel 文件</p>
    </div>
  </div>
</template>

<script>
import { ref } from "vue"; // 引入ref
import * as XLSX from "xlsx"; // 引入xlsx库

// 示例数据，用于匹配指标名称和 id
const indicators = [
  { id: "1.2.1", label: "集体观" },
  { id: "1.2.2", label: "团队协作" },
  { id: "1.2.3", label: "纪律性" },
  // 可以继续添加更多指标
];

export default {
  setup() {
    // 存储 Excel 数据
    const excelData = ref([]);

    // 处理文件上传
    const handleFileUpload = (event) => {
      const file = event.target.files[0];
      if (!file) return;

      console.log("文件上传成功:", file.name);

      const reader = new FileReader();
      reader.onload = (e) => {
        const data = e.target.result;
        const workbook = XLSX.read(data, { type: "binary" });

        console.log("读取的工作簿:", workbook);

        // 获取第一个工作表
        const sheet = workbook.Sheets[workbook.SheetNames[0]];

        // 如果工作表为空，打印警告
        if (!sheet) {
          console.error("工作表为空！");
          return;
        }

        console.log("读取的工作表:", sheet);

        // 将工作表内容转换成 JSON 格式
        const jsonData = XLSX.utils.sheet_to_json(sheet);

        console.log("转换后的 JSON 数据:", jsonData);

        // 如果没有数据，打印警告
        if (jsonData.length === 0) {
          console.error("读取到的数据为空！");
          return;
        }

        // 处理数据
        excelData.value = jsonData.map((item) => {
          // 提取"批次号", "班级代码", "扫描序号"
          const { 批次号, 班级代码, 扫描序号,学生学号, ...rest } = item;

          // 用于存储加分和减分计算结果
          const scores = {};

          // 处理每一项加分和减分
          Object.entries(rest).forEach(([key, value]) => {
            // 使用正则匹配加分和减分项
            const match = key.match(/(.+)(加分|减分)/);
            if (match) {
              const [, metric, type] = match;

              // 查找匹配的指标 ID
              const indicator = indicators.find((ind) => ind.label === metric);
              const id = indicator ? indicator.id : null;

              // 初始化指标分数
              if (!scores[metric]) {
                scores[metric] = { id, add: 0, subtract: 0, total: 0 };
              }

              // 累加加分和减分
              if (type === "加分") {
                scores[metric].add += parseInt(value, 10) || 0;
              } else if (type === "减分") {
                scores[metric].subtract += parseInt(value, 10) || 0;
              }

              // 计算总分数
              scores[metric].total =
                scores[metric].add - scores[metric].subtract > 0
                  ? scores[metric].add - scores[metric].subtract
                  : 0;
            }
          });

          // 返回最终数据
          return {
            批次号,
            班级代码,
            扫描序号,
            学生学号,
            scores, // 记录每个指标的加分减分和 id
          };
        });

        // 打印处理后的数据
        console.log("最终处理后的数据:", excelData.value);
      };

      reader.readAsBinaryString(file);
    };

    // 返回响应式数据和方法
    return {
      excelData,
      handleFileUpload,
    };
  },
};
</script>

<style scoped lang="less">
/* 样式可以根据需求进行定制 */
.hello {
  padding: 20px;
  text-align: center;
}

input[type="file"] {
  margin-bottom: 20px;
}

pre {
  text-align: left;
  white-space: pre-wrap;
  word-wrap: break-word;
}
</style>
